#ifndef INTERFACE_HPP
#define INTERFACE_HPP

#include <stdio.h>

namespace Test
{
	class BaseClass
	{
	public:
		static const int IPI =314596;

		virtual ~BaseClass() {}

		virtual void DoSomething() = 0;

		static BaseClass *Factory();
		int FieldA;
	};

	class DerivedClass: public BaseClass
	{
	public:
		DerivedClass()
			: ConstField(-1)
		{
			FieldA = 0;
			FieldB = 1;
		}

		DerivedClass(int A, float B= -1.0f)
			: ConstField(A+1)
		{
			FieldA = A;
			FieldB = B;
		}

		~DerivedClass()
		{
			printf("~DerivedClass\n");
		}

		virtual void DoSomething()
		{
			printf("Something done\n");
		}

		float FieldB;

		const int ConstField;
	};

	void DoSomething();
	void DoSomething2(short value);
	int Factorial(int x);
	float Square(float x);

	void DoClass(BaseClass *obj);
	extern int GlobalVarA;
}; // namespace Test

void GlobalFunction();
extern float GlobalVarB;
#endif //INTERFACE_HPP
